Handle the fact the the changed row may also be moved. (#159387, Olivier
authorMatthias Clasen <mclasen@redhat.com>
Thu, 2 Dec 2004 04:27:58 +0000 (04:27 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 2 Dec 2004 04:27:58 +0000 (04:27 +0000)
2004-12-01  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtkiconview.c (gtk_icon_view_row_changed): Handle the
fact the the changed row may also be moved.  (#159387, Olivier
Andrieu)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkiconview.c

index 7c8132afcc9a91bc45ddeeea49d65e3cd03219c4..467fc2b33efadf1fa27801437a85fe95aa6da082 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkiconview.c (gtk_icon_view_row_changed): Handle the
+       fact the the changed row may also be moved.  (#159387, Olivier 
+       Andrieu)
+
 2004-12-01  Tor Lillqvist  <tml@iki.fi>
 
        * modules/input/imime.c (im_module_create): Use the module's
index 7c8132afcc9a91bc45ddeeea49d65e3cd03219c4..467fc2b33efadf1fa27801437a85fe95aa6da082 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkiconview.c (gtk_icon_view_row_changed): Handle the
+       fact the the changed row may also be moved.  (#159387, Olivier 
+       Andrieu)
+
 2004-12-01  Tor Lillqvist  <tml@iki.fi>
 
        * modules/input/imime.c (im_module_create): Use the module's
index 7c8132afcc9a91bc45ddeeea49d65e3cd03219c4..467fc2b33efadf1fa27801437a85fe95aa6da082 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkiconview.c (gtk_icon_view_row_changed): Handle the
+       fact the the changed row may also be moved.  (#159387, Olivier 
+       Andrieu)
+
 2004-12-01  Tor Lillqvist  <tml@iki.fi>
 
        * modules/input/imime.c (im_module_create): Use the module's
index 7c8132afcc9a91bc45ddeeea49d65e3cd03219c4..467fc2b33efadf1fa27801437a85fe95aa6da082 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkiconview.c (gtk_icon_view_row_changed): Handle the
+       fact the the changed row may also be moved.  (#159387, Olivier 
+       Andrieu)
+
 2004-12-01  Tor Lillqvist  <tml@iki.fi>
 
        * modules/input/imime.c (im_module_create): Use the module's
index 79787f093e36b4b92f00502ea7733b103ae2b642..5808248ba695b89d2f4c8133b489b5d9af719411 100644 (file)
@@ -2176,12 +2176,56 @@ gtk_icon_view_row_changed (GtkTreeModel *model,
                           gpointer      data)
 {
   GtkIconViewItem *item;
-  gint index;
+  GList *list, *next;
+  gint index, i, pos;
   GtkIconView *icon_view;
+  gboolean iters_persist;
+  GtkTreePath *p;
 
   icon_view = GTK_ICON_VIEW (data);
+
+  iters_persist = gtk_tree_model_get_flags (icon_view->priv->model) & GTK_TREE_MODEL_ITERS_PERSIST;
   
   index = gtk_tree_path_get_indices(path)[0];
+
+  if (iters_persist)
+    {
+      for (list = icon_view->priv->items, pos = 0; list; list = list->next, pos++)
+       {
+         item = list->data;
+         p = gtk_tree_model_get_path (icon_view->priv->model, &item->iter);
+         i = gtk_tree_path_get_indices (p)[0];
+         gtk_tree_path_free (p);
+         if (i == index)
+           break;
+       }
+
+      if (pos != index)
+       {
+         for (next = list->next; next; next = next->next)
+           {
+             item = next->data;
+             
+             item->index--;
+           }
+         
+         item = list->data;
+         icon_view->priv->items = g_list_delete_link (icon_view->priv->items, list);
+         item->index = index;
+         
+         icon_view->priv->items = g_list_insert (icon_view->priv->items,
+                                                 item, index);
+         
+         list = g_list_nth (icon_view->priv->items, index + 1);
+         for (; list; list = list->next)
+           {
+             item = list->data;
+             
+             item->index++;
+           } 
+       }
+    }
+
   item = g_list_nth (icon_view->priv->items, index)->data;
 
   gtk_icon_view_item_invalidate_size (item);